首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium WebDriver - Do页面滚动和单击页面上的多个检查

Selenium WebDriver - Do页面滚动和单击页面上的多个检查
EN

Stack Overflow用户
提问于 2016-07-22 11:36:12
回答 1查看 215关注 0票数 1

亲爱的所有人,

在下面的场景中需要帮助!

场景:登录到网站,成功登录后,我正在搜索三星银河手机,一旦搜索结果显示在页面上,我需要缩小搜索结果范围,从页面左侧选择下面的复选框,这需要滚动。

  • 三星
  • 安卓
  • 电池- 3000至3999马赫
  • 屏幕- 5.5英寸及以上
  • Ram - 4GB
  • 低价= 25000
  • 高价= 300000

下面的代码(实现POM)

问题-这段代码是检查三星的,但是当它检查安卓系统时,我得到消息-

在缓存中找不到的元素--可能页面在查找命令持续时间或超时后发生了变化: 30.13秒

请告诉我如何实现滚动部分,并做所有的选择,我已经提到。谢谢你提前帮忙!

代码语言:javascript
复制
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();

    }

}
EN

回答 1

Stack Overflow用户

发布于 2016-07-22 12:07:51

这是由于Stale Element Reference Exception造成的。

最常见的原因是元素所在的页面已被刷新,或者用户已导航到另一个页面。一个不太常见但仍然很常见的原因是JS库删除了一个元素,并将其替换为一个具有相同ID或属性的元素。在这种情况下,虽然替换元素看起来可能是相同的,但它们是不同的;驱动程序无法确定替换实际上是预期的。

在您的例子中,您已经存储了Android_Check,所以在单击Samsung_Check.click();之后页面发生了更改,因此selenium无法在缓存中找到Android_Check,需要再次刷新Android_Check,您应该尝试如下:-

代码语言:javascript
复制
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();

希望它有帮助。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38525469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档