NoSuchElementException на геройку, но работает на localhost - PullRequest
0 голосов
/ 18 июня 2019

У меня есть приложение для разбора oddsportal, которое отлично работает на 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/']"}

в журналахна героку

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Согласно рекомендациям , когда ваш сценарий использования должен вызывать click() для любого элемента, когда страница загружается сразу после driver.get() вместо presenceOfElementLocated(), вам нужноиспользовать ExpectedConditions как elementToBeClickable() следующим образом:

new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@href='/soccer/austria/tipico-bundesliga/results/']"))).click();
0 голосов
/ 18 июня 2019

Вот несколько шагов, которые могут решить эту проблему: 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...