Selenium Webdriver - 在 HTML DOM 未更改的情况下单击多个下拉列表时出现陈旧元素异常

Selenium Webdriver - 在 HTML DOM 未更改的情况下单击多个下拉列表时出现陈旧元素异常

问题描述:

我尝试自动化一个场景,条件是我必须从下拉菜单中选择一个选项,然后旁边还有另一个下拉菜单,我必须单击下一个下拉菜单中的一个选项才能启用按钮.我尝试使用代码,但它仅单击第一个选项,并显示错误为陈旧的元素参考:元素未附加到页面文档.请帮忙.如果不是很清楚,请告诉我.

I tried to automate a scenario, where the condition is that I have to select an option from drop down and then there's another dropown next to it, I have to click one option from next drop to enable to button . I tried with the code but it clicks only the first option,.And showing error as stale Element reference:element is not attached to the page document. Please help. Please let me know if in not very clear.

当您选择 Insurance Test Client 时,只有您可以选择 Product Insurance,这实质上意味着HTML DOM 发生更改,导致 StaleElementException.为了避免这种情况,一旦我们从第一个下拉列表中选择,我们需要为第二个下拉列表的元素在 HTML DOM 中呈现一些wait.然后我们将使用 Select 类来选择一个选项.试试下面的代码块:

When you select Insurance Test Client then only you get the option Product Insurance, which essentially means the HTML DOM gets changed, which results in StaleElementException. To avoid that, once we select from the first dropdown, we need to induce some wait for the elements of the second dropdown to render in the HTML DOM. Then we will use Select Class to select an option. Try out the following code block:

//Select Channel 
Select oSelectChannel = new Select(driver.findElement(By.id("client"))); 
oSelectChannel.selectByVisibleText("Insurance Test Client"); 

WebDriverWait wait5 = new WebDriverWait(driver, 10);
wait5.until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_of_a_Category_item")));

//Select Category 
Select oSelectCategory = new Select(driver.findElement(By.xpath("//*[@id='category']"))); 
oSelectCategory.selectByVisibleText("Product Insurance");