根据在另一个下拉列表

时间:2015-06-25 08:06:17

标签: java drop-down-menu selenium-webdriver

我在页面上有几个下拉列表;在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);
}

2 个答案:

答案 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);
  1. 更改selectEventType以返回新的页面对象,基本上这与上面的内容相同

    public CreateAsset selectEventType(String eventType)
    {
        this.eventType.sendKeys(EVENTTYPE);
        返回new CreateAsset(_driver);
    }

  2. 然后你会在你的POM中用

    来调用它
    asset = asset.selectEventType(list_event_type);
    

答案 1 :(得分:0)

以下解决方法可以正常运行!

wd.findElement(By.cssSelector("body")).sendKeys(Keys.chord(Keys.ALT, Keys.TAB));