我在页面上有几个下拉列表;在First Drop-down上选择一个值后,Second Drop-down将启用并相应地加载值。
手动运行时,在First Drop-down中选择一个值后,页面将被加载并启用Second Drop-down,并根据First Drop-down中选择的值列出值。
但是,当使用Selenium Webdriver(在Java中)进行自动化时,只会选择First Drop-down的值,并且永远不会启用或加载第二个下拉列表。
甚至尝试使用如下的WebDriverWait,但仍然没有运气。
WebDriverWait wait = new WebDriverWait(wd, 50);
wait.until(ExpectedConditions.elementToBeClickable(By.id("event")));
注意到只有我们移出页面(ALT + TAB)并再次进入页面加载页面并启用第二个下拉列表。
下面也会抛出异常,
org.openqa.selenium.TimeoutException: Timed out after 50 seconds waiting for element to be clickable: By.id: event
请告知。
使用网页对象模型进行编码:
在POM课程中:
//Create Object for Page 1
CreateAsset asset = PageFactory.initElements(wd,CreateAsset.class);
//Read the values of First & Second Drop-down from an excel
String list_event_type = readsheet.getRow(1).getCell(2).getStringCellValue();
String list_event = readsheet.getRow(1).getCell(3).getStringCellValue();
//Calling Drop-down methods in Page Factory POM Class
asset.selectEventType(list_event_type);
WebDriverWait wait = new WebDriverWait(wd, 50);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("event")));
asset.selectEvent(list_event);
在页面工厂类中:
//select the given value on the First Drop-down
@FindBy(how = How.ID, using = "eventType")
public WebElement eventType;
public void selectEventType(String eventType)
{
this.eventType.sendKeys(eventType);
}
//select the given value on Sescond Drop-down
@FindBy(how = How.ID, using = "event")
public WebElement event;
public void selectEvent(String event)
{
this.event.sendKeys(event);
}
答案 0 :(得分:0)
您使用相同的页面对象来选择这两个值,问题是页面对象只初始化一个(从一开始。这意味着当eventType元素被更改时,事件属性永远不会被值初始化。< / p>
两个选项:
1.选择eventType
//Calling Drop-down methods in Page Factory POM Class
asset.selectEventType(list_event_type);
asset = PageFactory.initElements(wd,CreateAsset.class);
更改selectEventType以返回新的页面对象,基本上这与上面的内容相同
public CreateAsset selectEventType(String eventType)
{
this.eventType.sendKeys(EVENTTYPE);
返回new CreateAsset(_driver);
}
然后你会在你的POM中用
来调用它asset = asset.selectEventType(list_event_type);
答案 1 :(得分:0)
以下解决方法可以正常运行!
wd.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.ALT, Keys.TAB));