Here is the code i have written
I get the below error when the weblist selects second user from drop down the Error is
Caused by Element not found in the cache - perhaps the page has changed since it was looked up
The code is
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
public class SimpleBrowseroperation
{
public static void main(String[] args) throws InterruptedException
{
WebDriver driver = new FirefoxDriver();
//WebDriver driver = new InternetExplorerDriver();
//WebDriver driver = new ChromeDriver();
//driver.navigate().to("https://google.co.in");
driver.navigate().to("https://testnwadmin.aditi.com/nwadmin/spages/home.aspx");
List<WebElement> ele = driver.findElements(By.xpath("//*[#id='divLoginSection']/div/div[3]"));
driver.findElement(By.id("Login1_txtEmailID")).sendKeys("testdata5#aditi.com");
//driver.findElement(By.id("Login1_txtPassword")).sendKeys("Testing1*");
driver.findElement(By.id("Login1_btnLogin")).click();
driver.findElement(By.xpath("//*[#id='sliding-navigation']/li[2]/a")).click();
String ViewMorelink="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[3]/td";
String ClkViewMore="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[3]//a[contains(text(),'View')]";
String Covered="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[2]/td/table/tbody/tr[%s]/td[2]";
String ViewDetails="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[2]/td/table/tbody/tr[%s]/td[3]/a";
String TableRowCount="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[2]/td/table/tbody/tr";
String ViewCarrier="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[2]/td/table/tbody/tr[%s]/td[3]";
String ClaimPayer="//*[#id='divContentHolder']/div[2]/table[%s]/tbody/tr[2]/td/table/tbody/tr[%s]/td[4]";
Select WebList=new Select(driver.findElement(By.xpath("//*[#id='ddlSelectUser']")));
List<WebElement> userlist = WebList.getOptions();
int usercnt=userlist.size();
System.out.println(usercnt);
String[] linkTexts = new String[usercnt];
int i = 0;
for (WebElement e : userlist)
{
linkTexts[i] = e.getText();
i++;
}
for(int usrcnt=0;usrcnt<=usercnt;usrcnt++)
{
WebList.selectByIndex(usrcnt);
> /
> somecode
> /
}
}
}
Related
My below code does not work. Already checked checkboxes are getting unchecked when I run below code.
Need your suggestions.
'''
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import io.github.bonigarcia.wdm.WebDriverManager;
public class DropboxSelect {
public static void main(String[] args) {
WebDriverManager.chromedriver().setup();
WebDriver driver = new ChromeDriver(); // launch chrome
driver.manage().window().maximize(); // maximize window
driver.manage().deleteAllCookies(); // delete all the
cookies
// dynamic wait
driver.manage().timeouts().pageLoadTimeout(40,
TimeUnit.SECONDS);
driver.manage().timeouts().implicitlyWait(10,
TimeUnit.SECONDS);
driver.get("https://www.jquery-az.com/boots/demo.php?
ex=63.0_2"); // enter URL
driver.findElement(By.xpath("//button[contains(#class,'multiselect')]")).click();
List<WebElement> list =
driver.findElements(By.xpath("//ul[contains(#class,'multiselect-
container')]//li//a//label"));
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).getText());
if (!list.get(i).isSelected()) {
list.get(i).click();
}
}
'''
You could adapt the xpath for your list and the condition if an item is selected as follows:
List<WebElement> list = driver
.findElements(By.xpath("//ul[contains(#class,'multiselect-container')]//li"));
for (WebElement webElement : list) {
System.out.println(webElement.getText());
if (!"active".equals(webElement.getAttribute("class"))) {
webElement.click();
}
}
It works but it is a bit brittle.
Here i am trying to select return date 12 of April month. i tried with different customized xpath and css but unable to locate the element:
import java.util.List;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Make_my_trip {
public static void main(String[] args) throws InterruptedException {
System.setProperty("webdriver.chrome.driver", "F:\\Selenium\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.makemytrip.com/");
// Selecting Return date
driver.findElement(By.id("hp-widget__return")).click();
//WebDriverWait ws = new WebDriverWait(driver, 10);
//ws.until(ExpectedConditions.presenceOfElementLocated(By.id("dp1551508380301")));
Thread.sleep(2000);;
while (!driver.findElement(By.xpath("//span[#class ='ui-datepicker-month']")).getText().contains("April")) {
System.out.println("Return date selected ");
driver.findElement(By.xpath(
"div[#id='dp1551508898872']//span[#class='ui-icon ui-icon-circle-triangle-e'][contains(text(),'Next')"))
.click();
}
List<WebElement> returndate = driver.findElements(By.xpath("//a[#class ='ui-state-default']"));
int count = returndate.size();
for (int j = 0; j < count; j++) {
String returndatetext = driver.findElements(By.xpath("//a[#class ='ui-state-default']")).get(i).getText();
if (returndatetext.equalsIgnoreCase("12")) {
driver.findElements(By.xpath("//a[#class ='ui-state-default']")).get(i).click();
break;
}
}
}
PS :
If we use explicitly wait getting "org.openqa.selenium.InvalidSelectorException" Error so as of now use Thread.sleep(1000).
If we use Xpath //div[#class='ui-datepicker-group ui-datepicker-group-last']/div/a/span[contains(text(),'Next' )][1] getting
org.openqa.selenium.ElementNotVisibleException: element not visible
"Element not visible". I had this error too. It's mean your searchable element isn't visible in the current snapshot. You should focus on that element or scroll down till element appear in the snapshot
This question already has answers here:
NoSuchElementException, Selenium unable to locate element
(3 answers)
Closed 4 years ago.
I am trying to run the below selenium code and I am getting an exception:
package demos;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class AmazonLogin {
public static void main(String[] args) throws InterruptedException {
WebDriver driver;
// Go to website and login
driver = utilites.DriverFactor.open("chrome");
driver.get("https://www.amazon.in/your-account");
WebElement loginName = driver.findElement(By.xpath("/html/body/div[1]/div[2]/div/div[2]/div[2]/a/div/div"));
WebElement emailId = driver.findElement(By.xpath("//*[#id=\"ap_email\"]"));
// WebElement continueButton=driver.findElement(By.id("continue"));
// WebElement password=driver.findElement(By.name("password"));
// WebElement loginButton=driver.findElement(By.id("signInSubmit"));
// WebElement message=driver.findElement(By.className("nav-line-1"));
//
loginName.click();
emailId.sendKeys("aryan.ragavan#gmail.com");
}
}
Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such
element:
Unable to locate element: {"method":"xpath","selector":"//*[#id="ap_email"]"}
Selenium is trying to find webelement emailid before it clicks loginName webelement. Please help.
This is because you are trying to read the emailId field before you have clicked on login. Move the following line below loginName.click() statement.
WebElement emailId = driver.findElement(By.xpath("//*[#id=\"ap_email\"]"));
the issue is you are searching for 'app_element' on the main page of amazon.
Introduce yourself to POM implementation here:
https://www.guru99.com/page-object-model-pom-page-factory-in-selenium-ultimate-guide.html
DO-NOT use absolute xpath in any case as you did here:
findElement(By.xpath("/html/body/div[1]/div[2]/div/div[2]/div[2]/a/div/div"));
Here is an example of login logic for amazon:
#Test
public void amazon_login() {
browseToUrl("https://www.amazon.in/your-account");
// select login & security option
WebElement loginAndSecurityBtn = driver.findElement(By.xpath("//div[#data-card-identifier='SignInAndSecurity']"));
// navigate to the next page
loginAndSecurityBtn.click();
// enter email or phone
WebElement emailOrPhoneInput = driver.findElement(By.id("ap_email"));
emailOrPhoneInput.sendKeys("example#email.com");
// click continue btn
WebElement continueBtn = driver.findElement(By.id("continue"));
continueBtn.click();
// enter password
WebElement passwordInput = driver.findElement(By.id("ap_password"));
passwordInput.sendKeys("password");
// login
WebElement loginBtn = driver.findElement(By.id("signInSubmit"));
loginBtn.click();
}
For Amazon Login, You Can Refer This Code . or Below POM(PageobjectModel) Code
package TestId;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
public class NewTest {
WebDriver driver;
#Test
public void f()
{
System.setProperty("webdriver.chrome.driver", "E:\\New Folder\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.amazon.in/your-account");
WebElement e1 = driver.findElement(By.xpath("//*[#id='nav-link-yourAccount']/span[2]"));
WebElement e2 = driver.findElement(By.xpath("//*[#id='nav-flyout-ya-signin']/a/span"));
Actions a1 = new Actions(driver);
a1.moveToElement(e1).click(e2).build().perform();
}
#AfterTest
public void CheckLogin()
{
WebElement e3 = driver.findElement(By.xpath("//*[#id='authportal-main-section']/div[2]/div/div[1]/form/div/div/div"));
WebDriverWait wait = new WebDriverWait(driver, 5);
WebElement e4 = wait.until(ExpectedConditions.visibilityOf(e3));
if(e4.isDisplayed())
{
driver.findElement(By.id("ap_email")).sendKeys("Test#gmail.com");
System.out.println("Email Successfully Passed");
}
}
}
I Used Webdriver Wait because, i Need to Wait Until The Login Page is Loaded and i Used an if-Condition because after The Page is Displayed Pass The Email id.
if You Find Difficultly in Above Use Use Below POM Method.
Amazon Login Using POM:
package POM;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.How;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class Pageobject
{
WebDriver driver;
public Pageobject(WebDriver driver)
{
this.driver=driver;
}
#FindBy(xpath = "//*[#id='nav-link-yourAccount']/span[2]")
public WebElement Siginpath;
#FindBy(how=How.XPATH,using="//*[#id='nav-flyout-ya-signin']/a/span")
public WebElement clicksignin;
#FindBy(how=How.XPATH,using="//*[#id='authportal-main-section']/div[2]/div/div[1]/form/div/div/div")
public WebElement ElementtobeVisible;
#FindBy(how=How.ID,using="ap_email")
public WebElement Email;
public void Loginpage(String email)
{
Actions a1 = new Actions(driver);
a1.moveToElement(Siginpath).click(clicksignin).build().perform();
WebDriverWait wait = new WebDriverWait(driver, 5);
WebElement e4 = wait.until(ExpectedConditions.visibilityOf(ElementtobeVisible));
if(e4.isDisplayed())
{
Email.sendKeys(email);
}
}
}
Test Case For POM :
package POMtestcase;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.PageFactory;
import org.testng.annotations.Test;
import POM.Pageobject;
public class Pomtest
{
WebDriver driver;
#Test
public void Checkvaliduser()
{
System.setProperty("webdriver.chrome.driver", "E:\\New Folder\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.amazon.in/your-account");
Pageobject object = PageFactory.initElements(driver, Pageobject.class); //Calling The Class Here
object.Loginpage("test#gmail.com");//Passing the Mail id
}
}
When I run the test method runSuite(), everything is fine till the last line of the method:
button.click(); // clicks the button on page
The above statement results in the page expired issue.
I get the following message on the browser window:
ERROR: This page has expired. Please cancel this operation and try again.
I tried playing around browser cache, but that didn't help.
package com.swtestacademy.webdriver;
import java.util.Iterator;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebDriver.Timeouts;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.openqa.selenium.firefox.internal.ProfilesIni;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.support.ui.ExpectedCondition;
import org.openqa.selenium.support.ui.Wait;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.junit.*;
import com.util.MockLoginClient;
import static org.junit.Assert.*;
public class MainTest {
private WebDriver driver;
private String baseUrl;
private StringBuffer verificationErrors = new StringBuffer();
#Before
public void setUp() throws Exception {
MockLoginClient.instance().authenticateAsHcrCaseWorker();
//System.setProperty("webdriver.ie.driver","C:/IEDriverServer_x64_3.4.0/IEDriverServer.exe");
//driver = new InternetExplorerDriver();
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
FirefoxOptions options = new FirefoxOptions();
options.addPreference("log", "{level: trace}");
capabilities.setCapability("marionette", true);
capabilities.setCapability("moz:firefoxOptions", options);
capabilities.setCapability(CapabilityType.ELEMENT_SCROLL_BEHAVIOR, 1);
capabilities.setCapability(CapabilityType.SUPPORTS_APPLICATION_CACHE, "applicationCacheEnabled");
System.setProperty("webdriver.gecko.driver", "C:/geckodriver-v0.16.1-win64/geckodriver.exe");
//ProfilesIni profile = new ProfilesIni();
//profile.getProfile("default");
FirefoxProfile ffprofile = new FirefoxProfile();
ffprofile.setPreference("browser.cache.disk.enable", true);
ffprofile.setPreference("browser.cache.memory.enable", true);
ffprofile.setPreference("browser.cache.offline.enable", true);
ffprofile.setPreference("network.http.use-cache", true);
driver = new FirefoxDriver(capabilities);//ffprofile);
//driver.manage().deleteAllCookies();
baseUrl = "http://localhost:8082/";
driver.manage().timeouts().implicitlyWait(3000, TimeUnit.MILLISECONDS);
//driver.manage().timeouts().pageLoadTimeout(10,TimeUnit.SECONDS);
// driver.manage().timeouts().setScriptTimeout(3000,TimeUnit.MILLISECONDS);
driver.get(baseUrl + "/Curam/AppController.do");
}
#Test
public void test() throws Exception {
driver.get(baseUrl + "/Curam/AppController.do");
driver.findElement(By.id("app-sections-container-dc_tablist_DefaultAppSection-sbc_tabLabel")).click();
driver.findElement(By.cssSelector("div.dojoxExpandoIcon.dojoxExpandoIconLeft")).click();
Thread.sleep(1000);
driver.findElement(By.id("dijit_layout_AccordionPane_1_button_title")).click();
driver.findElement(By.cssSelector("#dijit_layout_AccordionPane_1 > ul > li > a.curam-content-pane-single-link")).click();
driver.getWindowHandle();
Set<String> handles = driver.getWindowHandles(); // get all window handles
Iterator<String> iterator = handles.iterator();
while (iterator.hasNext()){
iterator.next();
}
//driver.switchTo().window(subWindowHandler); // switch to popup window
driver.findElement(By.id("curam_ModalDialog_0"));
driver.findElement(By.className("dijitDialogPaneContent"));
driver.findElement(By.id("curam_ModalUIMController_0"));
driver.findElement(By.className("contentPanelFrameWrapper"));
driver.switchTo().frame("iframe-curam_ModalDialog_0");
driver.findElement(By.tagName("html"));
driver.findElement(By.tagName("body"));
driver.findElement(By.id("content"));
driver.findElement(By.id("mainForm"));
driver.findElement(By.id("modal-actions-panel"));
// driver.findElement(By.xpath("//div[#id='modal-actions-panel']/div[2]/a/span/span/span")).click();
WebElement nxtBtn = driver.findElement(By.id("__o3btn.NEXTPAGE_2"));
Thread.sleep(1000);
nxtBtn.click();
driver.findElement(By.xpath("//div[#id='modal-actions-panel']/div[2]/a[2]/span/span/span")).click();
driver.findElement(By.id("__o3btn.SAVE_0")).click();
}
#After
public void tearDown() throws Exception {
//driver.quit();
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
#Test
public void runSuite() throws InterruptedException {
System.out.println(driver);
WebElement xy = driver.findElement(By.id("app-sections-container-dc_tablist_DefaultAppSection-sbc_tabLabel"));
xy.click();
driver.findElement(By.cssSelector("div.dojoxExpandoIcon.dojoxExpandoIconLeft")).click();
WebElement personSearchLink = driver.findElement(By.linkText("Person…"));
Thread.sleep(1000);
personSearchLink.click();
WebElement appStc = driver.findElement(By.id("DefaultAppSection-stc"));
WebElement djtTab = appStc.findElement(By.className("dijitTabPaneWrapper"));
Thread.sleep(1000);
WebElement tpChldWrapper = djtTab.findElement(By.className("dijitTabContainerTopChildWrapper"));
WebElement lyoutCntntPane = tpChldWrapper.findElement(By.id("dojox_layout_ContentPane_1"));
WebElement tbWrpr = lyoutCntntPane.findElement(By.className("tab-wrapper"));
WebElement noDtlsPnl = tbWrpr.findElement(By.className("no-details-panel"));
WebElement cntntAreaCntnr = noDtlsPnl.findElement(By.className("content-area-container"));
WebElement fstUIMCntrlr = cntntAreaCntnr.findElement(By.id("curam_FastUIMController_1"));
WebElement cntntPnlFrmWrpr = fstUIMCntrlr.findElement(By.className("contentPanelFrameWrapper"));
WebElement iFrameElmnt = cntntPnlFrmWrpr.findElement(By.tagName("iframe"));
driver.switchTo().frame(iFrameElmnt);
WebElement inputText = driver.findElement(By.id("__o3id0"));
Thread.sleep(100);
inputText.sendKeys("24684");
// Thread.sleep(4000);
WebElement button = driver.findElement(By.linkText("Search"));
button.click();
}
}
I could see the issue. This behavior is seen for Firefox and Internet explorer only and not for chrome.
The solution would be to check the default desired capabilities for Chrome driver and set the same for Firefox driver or IE driver.
Easier Solution: Switch to Chrome Driver.
This is the code which I am using. I want to select different values from the "class" drop down. I am getting the count of the no. of drop downs as correct but the values are not getting selected under the dropdown.
package selectclasspackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;
import org.junit.Test;
//import org.junit.Before;
import static javax.swing.JOptionPane.showMessageDialog;
import java.util.List;
import org.openqa.selenium.WebElement;
public class selectclass {
#Test
public void Sample () throws InterruptedException {
System.setProperty("webdriver.gecko.driver", "C:\\\\Users\\Rajiv\\Downloads\\geckodriver-v0.14.0-win64\\geckodriver.exe");
WebDriver driver = new FirefoxDriver ();
String URL = "https://www.goibibo.com/";
driver.get(URL);
driver.manage().window().maximize();
Thread.sleep(3000);
Select seatingclass = new Select (driver.findElement(By.id("gi_class")));
List <WebElement> elementCount = seatingclass.getOptions();
System.out.println(elementCount.size());
seatingclass.selectByVisibleText ("Premium Economy");
System.out.println("Premium Economy selected");
Thread.sleep(3000);
for (int i = 0; i < elementCount.size(); i++)
{
new Select(driver.findElement(By.id("gi_class"))).selectByIndex(i);
}
seatingclass.selectByIndex(2);
System.out.println("First Class selected");
Thread.sleep(3000);
seatingclass.selectByValue("B");
System.out.println("Business Class selected");
Thread.sleep(3000);
}
}
Why are you using for loop? selectByValue works fine as the number of options in #selnoOfAdults are fixed. The below code worked fine. It selected 10 in the #selnoOfAdults.
Select seatingclass = new Select(driver.findElement(By.id("selnoOfAdults")));
seatingclass.selectByValue("10");