在Heroku上为NoSuchElementException但在本地主机上可用

时间:2019-06-18 11:21:04

标签: java selenium heroku webdriver webdriverwait

我有一些奇怪的解析应用程序,可以在localhost上完美运行,但是当我将其上传到heroku时,它无法通过xpath找到元素。 它转到带有driver.get("url")(已安装chrome和chromedriver)的页面,我可以在日志中看到currentUrl,但随后它只是看不到元素

我尝试过Thread.sleep(n),其中n甚至是120秒, WebDriverWait wait = new WebDriverWait(driver, 120);没有帮助

代码段:

options.setBinary("/app/.apt/usr/bin/google-chrome"); 
System.setProperty("webdriver.chrome.driver","/app/.chromedriver/bin/chromedriver");
WebDriver driver = new ChromeDriver(options);
driver.get("https://www.oddsportal.com/results/#soccer");
WebDriverWait wait = new WebDriverWait(driver, 120);

element = wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//a[@href='/soccer/austria/tipico-bundesliga/results/']")));
element.click();

当我在localhost上使用它时页面会打开,但是

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element:{"method":"xpath","selector":"//a[@href='/basketball/usa/nba/results/']"}

在heroku上登录

2 个答案:

答案 0 :(得分:1)

根据最佳做法,当您的用例要在任何元素上调用click()时,只要页面加载到driver.get()之后的presenceOfElementLocated()中,您需要按以下方式使用ExpectedConditions作为 elementToBeClickable()

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@href='/soccer/austria/tipico-bundesliga/results/']"))).click();

答案 1 :(得分:0)

以下一些步骤可以解决此问题: 1.检查您是否在正确的页面上。 2.使用

检查页面是否已完全加载
private void WaitUntilDocumentIsReady(TimeSpan timeout)
{
    JavascriptExecutor js = (JavascriptExecutor)driver;
    var wait = new WebDriverWait(WebDriver, timeout);            

    // Check if document is ready
    Func<IWebDriver, bool> readyCondition = webDriver => js.
        .ExecuteScript("return (document.readyState == 'complete' && jQuery.active == 0)");
    wait.Until(readyCondition);
}
  1. 尝试使用Javascript单击js.ExecuteScript("arguments[0].click();", element)