繁体   English   中英

Selenium是否可以在自适应的,调整大小的网站上找到正确的Web元素?

[英]Can Selenium Find the correct Web Element on a responsive, resized website?

我的Web应用程序是响应式的。 也就是说,它会针对不同的屏幕尺寸调整大小。 我们的开发人员已对此进行了编码,因此,xpath找到的大多数Web元素实际上都具有2个。其中一个用于全屏,而一个用于“移动”或小屏。

例如,如果我使用Firepath仅通过链接文本搜索Xpath,它将说“找到了2个元素”,则只能看到一个,然后,如果我调整浏览器窗口的大小,一个将消失,而另一个将可见。

我的问题是:两个屏幕尺寸都可以使用一个Selenium脚本吗? 它将自动使用可见或可点击的元素? 如果只为两个元素之一编写脚本,则会出现“元素不可点击”异常。

或s的最佳解决方案是将所有移动元素分别添加到page对象,并创建如下方法:

if (DesktopWebElement.isVisible)
    do the test for desktop
else if (MobileWebElement.isVisible)
    do the test for mobile

像这样,分别添加每个移动元素并编写页面对象中的每个方法的脚本似乎需要很多额外的工作。 为了节省时间,我只是想知道是否有一种方法可以使用Xpath查找两个元素,而Selenium会找到第一个可见的元素。

我遇到的情况是,除了不同的按钮外,显示的列还因屏幕大小而异。

我的页面文件包含如下方法

public int getScreenWidth() {
    Dimension aScreen = webDriver.manage().window().getSize();
    return aScreen.getWidth();
}

然后我的代码有如下内容:

if (screenWidth < 1440 ) {
    ...
}

开发人员与业务一起解决了哪些列下降以及哪些宽度下降。

开发人员设置了确定要显示哪个按钮的屏幕宽度截止值。 因此,我根据当前屏幕宽度单击桌面或移动按钮。 要求开发人员记录他们编码的屏幕宽度截止值。

您是否尝试过ExpectedConditions.visibilityOfElementLocatedBy ,根据文档,它会为您提供附加到DOM的可见元素。 这将使您能够与两个元素中可见的元素进行交互

WebDriver driver = new FirefoxDriver();
WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocatedBy(By.xpath(".//someXpath")));
element.click();

如果更适合您,也可以尝试elementTobeClickable条件。 请注意,这不会减慢测试速度,一旦该元素可见/可单击,它将被返回。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM