我要做的是在登录后,驱动程序将单击属性下拉菜单,选择一个选项并单击提交并重复该过程,直到循环完成。
下面是我的代码:
package com.genericlibrary;
import java.util.List;
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.Select;
import org.openqa.selenium.support.ui.WebDriverWait;
import com.util.Highlighter;
public class MobopsSearchJobsFromDropDown {
WebDriver driver;
Highlighter color;
public void getSetup() {
String path = System.getProperty("user.dir");
String driverPath = path + "\\Driver\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
driver = new ChromeDriver();
driver.navigate().to("http://mobops-test.jcdecauxna.com/");
driver.manage().window().maximize();
}
public void logIntoMobops() {
WebElement userName = driver.findElement(By.xpath("//*[contains(@id,'username')]"));
WebElement passWord = driver.findElement(By.xpath("//*[contains(@id,'password')]"));
WebElement loginButton = driver.findElement(By.xpath("//*[contains(text(),'Login')]"));
userName.sendKeys("test2");
passWord.sendKeys("1234");
loginButton.click();
}
public void selectEachPropertyAndSeachJob() {
WebElement dateRange = driver.findElement(By.xpath("//*[contains(@name,'date_range')]"));
WebElement last7days = driver.findElement(By.xpath("(//*[contains(text(),'Last 7 Days')])[2]"));
WebElement searchJobs = driver.findElement(By.xpath("//*[contains(@name,'layout')]"));
WebElement propertyDropdown = driver.findElement(By.xpath("//*[contains(@id,'property_id')]"));
Select dropdown = new Select(propertyDropdown);
List<WebElement> optionsInPropertyDropdown = dropdown.getOptions();
for (int i = 0; i < optionsInPropertyDropdown.size(); i++) {
if (propertyDropdown.isDisplayed() && propertyDropdown.isEnabled()) {
try {
propertyDropdown.click();
dropdown.selectByVisibleText(optionsInPropertyDropdown.get(i).getText());
dateRange.click();
last7days.click();
searchJobs.click();
System.out.println("Option Search is " + optionsInPropertyDropdown.get(i).getText());
} catch (org.openqa.selenium.StaleElementReferenceException ex) {
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOf(propertyDropdown));
}
}
}
}
public static void main(String[] args) {
MobopsSearchJobsFromDropDown obj = new MobopsSearchJobsFromDropDown();
obj.getSetup();
obj.logIntoMobops();
obj.selectEachPropertyAndSeachJob();
}
}
现在它的驱动程序只需选择第一个选项并单击提交。搜索完成后页面加载后立即出现以下错误:
Exception in thread "main" org.openqa.selenium.StaleElementReferenceException: stale element reference: element is not attached to the page document
我试图在我的代码中实现以下代码,但由于我是新手,我不知道如何实现以下来解决问题:
new WebDriverWait(driver, timeout)
.ignoring(StaleElementReferenceException.class)
.until((WebDriver d) -> {
d.findElement(By.xpath("//*[contains(@id,'property_id')]")).click();
return true;
});
非常感谢任何帮助克服这个问题。谢谢。