亲爱的所有人,
在下面的场景中需要帮助!
场景:登录到网站,成功登录后,我正在搜索三星银河手机,一旦搜索结果显示在页面上,我需要缩小搜索结果范围,从页面左侧选择下面的复选框,这需要滚动。
下面的代码(实现POM)
问题-这段代码是检查三星的,但是当它检查安卓系统时,我得到消息-
在缓存中找不到的元素--可能页面在查找命令持续时间或超时后发生了变化: 30.13秒
请告诉我如何实现滚动部分,并做所有的选择,我已经提到。谢谢你提前帮忙!
码
public class Amazon_Samsung_Galaxy_Search
{
WebDriver driver;
public Amazon_Samsung_Galaxy_Search(WebDriver driver)
{
this.driver=driver;
}
@FindBy (xpath = ".//input[@id='twotabsearchtextbox']") WebElement Product_Search;
@FindBy (xpath = "//input[@class='nav-input'][@type='submit']") WebElement Search_Click;
@FindBy (xpath = ".//*[@id='ref_1485076031']//img[@alt='Android']") WebElement Android_Check;
@FindBy (xpath = ".//*[@id='ref_3837712031']//img[@alt='Samsung']") WebElement Samsung_Check;
@FindBy (xpath = ".//*[@id='ref_8561098031']//img[@alt='3000 - 3999 mAh']") WebElement Battery_Check;
@FindBy (xpath = ".//*[@id='ref_6631751031']//img[@alt='5.5 Inches & Above']") WebElement Screen_Check;
@FindBy (xpath = ".//*[@id='ref_8561129031']//img[@alt='4 GB & More']") WebElement Ram_Check;
@FindBy (xpath = ".//input[@id='low-price']") WebElement Low_Price;
@FindBy (xpath = ".//input[@id='high-price']") WebElement High_Price;
@FindBy (xpath = "//input[@class='leftNavGoBtn']") WebElement GO_Button;
@FindBy (xpath = ".//span[@id='quartsPagelet']") WebElement Search_Result;
public void Search_Samsung_Galaxy()
{
Product_Search.sendKeys("Samsung Galaxy");
Search_Click.click();
Samsung_Check.click();
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='ref_1485076031']//img[@alt='Android']")));
Coordinates cor = ((Locatable)Android_Check).getCoordinates();
cor.inViewPort();
Android_Check.click();
}
}发布于 2016-07-22 12:07:51
这是由于Stale Element Reference Exception造成的。
最常见的原因是元素所在的页面已被刷新,或者用户已导航到另一个页面。一个不太常见但仍然很常见的原因是JS库删除了一个元素,并将其替换为一个具有相同ID或属性的元素。在这种情况下,虽然替换元素看起来可能是相同的,但它们是不同的;驱动程序无法确定替换实际上是预期的。
在您的例子中,您已经存储了Android_Check,所以在单击Samsung_Check.click();之后页面发生了更改,因此selenium无法在缓存中找到Android_Check,需要再次刷新Android_Check,您应该尝试如下:-
WebDriverWait wait = new WebDriverWait(driver, 10);
Android_Check = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath(".//*[@id='ref_1485076031']//img[@alt='Android']")));
Coordinates cor = ((Locatable)Android_Check).getCoordinates();
cor.inViewPort();
Android_Check.click();希望它有帮助。)
https://stackoverflow.com/questions/38525469
复制相似问题