java - Headless Chrome 的性能问题

标签 java selenium xpath

仅当启用 headless 模式时,我的脚本才会失败。请建议我在编码时应该是什么样子。

  1. 我的大多数脚本都因超时而失败。
  2. 定位器有什么我应该特别寻找的吗?我相信 css 在这种情况下不会帮助我。还有其他与定位器相关的东西吗?
  3. 在持续集成服务器中,执行速度非常慢。 Timed_Out 秒的限制固定为 50。这对我不起作用,甚至对 100 也不起作用。请建议我当我被限制只能使用最多 100 秒的 TimeOut 时如何处理,并且它遇到异常,因为它需要的秒数超过这个。

以下是我仅在启用 headless 时收到的一些异常,

1. WebDriverException: unknown error: Element <input type="radio" class="wizard-input" name="5a68a4c173bb-TOTAL-1" id="5a68a4c173bb-TOTAL-1" value="1"> is not clickable at point (496, 551). Other element would receive the click: <div class="navigation-bar">...</div>

尝试应用等待条件,甚至滚动并单击。

2. TimeoutException: Expected condition failed: waiting for element to be clickable: By.cssSelector: div.icon.icon-add.add-contact-button (tried for 50 second(s) with 500 MILLISECONDS interval)

尝试应用马塞尔建议的条件。正如所说,它甚至超过了 100 秒

这是我的代码的一些示例,

public void clickForwardButton(){
    WaitTillElementToBeClickable("xpath", LoginData.Forward);
    ScrollAndClickOnElement("xpath", LoginData.Forward);
} //The error seems to be like it wont scroll properly and hence I receive element not found exception

protected void WaitTillElementToBeClickable(String locatorType, String locatorValue) {
try {
  WebDriverWait wait = new WebDriverWait(driver, TIME_OUT_IN_SECONDS);
  if (locatorType.equalsIgnoreCase("cssSelector")) {
    wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(locatorValue)));
  } else if (locatorType.equalsIgnoreCase("xpath")) {
    wait.until(ExpectedConditions.elementToBeClickable(By.xpath(locatorValue)));
  } else if (locatorType.equalsIgnoreCase("id")) {
    wait.until(ExpectedConditions.elementToBeClickable(By.id(locatorValue)));
  }
} catch (Exception e) {
  logger.error("Webdriver Locator Error" + e);
}
}

最佳答案

如果您没有使用 WebDriverWait,请尝试一下

int seconds = 5;
WebDriverWait wait = new WebDriverWait(driver, seconds);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("yourID")));

您必须导入OpenQA.Selenium.Support.UI才能使用WebDriverWait

编辑

由于 WebDriverWait 方法未提供解决方案,因此请尝试向 ChromeOptions 添加额外的参数来设置窗口大小。由于默认的 headless 窗口大小可能比非 headless 窗口大小小很多,因此值得一试。设置较大窗口大小的另一个好处是减少滚动的需要。

ChromeOptions options = new ChromeOptions();
options.addArgument("headless");
options.addArgument("window-size=1920,1080");

// or

options.addArguments("headless", "window-size=1920,1080");

关于java - Headless Chrome 的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47530435/

相关文章:

java - Netty中通过ServerBootstrap ChannelPipeline发送消息时出现UnsupportedOperationException

java - 新的 SimpleDateFormat ("hh:mm a", Locale.getDefault()).parse ("04:30 PM")给出 Unparseable 异常

java - Spring Data 中的动态查询

java - 使用构建器模式和 Selenium 通过不同的条件组合执行不同的搜索

xml - XPath 可以跨 XML 的两个子树执行外键查找吗?

macos - 如何使用XPath和Swift 2.0解析html?

java - KeyStore.load 在空 .jks 文件上抛出 IOException

java - 如何写一个selenium脚本,让Selenium登录时不被要求输入验证码?

java - 如何使用appium自动化flutter移动应用程序?

java - 无法使用 java 选择 Selenium Webdriver 中的复选框