Невозможно найти элемент с помощью ссылки href - PullRequest
0 голосов
/ 31 января 2019

введите описание изображения здесь

Я не могу найти элемент с тегом привязки со ссылкой href (Ежемесячная ссылка во вкладке проигравшего - проверьте прикрепленное изображение).Получение исключения NoSuchElementFound.Уже пробовал использовать javascript executor и ждет.

HTML:

<div style="width:50%;font-size:14px;float:right;">
    <h2 class="f16 bold">Losers</h2>    
    <div class="tabs">
<a href="//money.rediff.com/losers/bse/daily">Daily</a>
</div>
    <div class="tabs">
<a href="//money.rediff.com/losers/bse/weekly">Weekly</a>
</div>
    <div class="tabs">
<a href="//money.rediff.com/losers/bse/monthly">Monthly</a>
</div>
</div>

Ответы [ 4 ]

0 голосов
/ 01 февраля 2019

Простой пример xpath для <a href="foo">

"//a[contains(@href,'foo')]"
0 голосов
/ 31 января 2019

К click() на элементе Проигравшие -> Ежемесячно , поскольку требуемые элементы находятся в пределах <iframe>, поэтому необходимо:

  • Индуцировать WebDriverWait для получения желаемого кадра и переключения на него .
  • Индуцирование WebDriverWait для желаемого элемента, который можно нажимать .
  • Вы можете использовать следующее решение на основе Python :

    • Кодовый блок:

      from selenium import webdriver
      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      driver = webdriver.Firefox(executable_path=r'C:\Utility\BrowserDrivers\geckodriver.exe')
      driver.get("https://money.rediff.com/losers/bse/monthly")
      WebDriverWait(driver, 10).until(EC.frame_to_be_available_and_switch_to_it((By.XPATH,"//iframe[@id='logwatch']")))
      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//h2[contains(., 'Losers')]//following::div[@class='curLink tabs']/a[contains(., 'Monthly')]"))).click()
      
0 голосов
/ 01 февраля 2019

В этом случае рекомендуется использовать селен linkText (org.openqa.selenium.By.linkText), который передает текст внутри тега и возвращает совпадение.Для правильного использования вы также можете использовать цепочку, вот простой пример:

import org.openqa.selenium.support.pagefactory.ByChained;
import org.openqa.selenium.By;
import static org.openqa.selenium.By.linkText;
import static org.openqa.selenium.By.cssSelector;

public static By chain(final By... bys) {
        return new ByChained(bys);
    }

public void yourClickMethodOnAElements(final String name) {
        click(chain(cssSelector("div.tabs > a"), linkText(name)));
    }
public WebElement click(final By by) {
        return click(driver.findElement(by));
    }

public WebElement click(WebElement element) {
        Actions action = new Actions(driver);
        action.moveToElement(element).click().perform();
        sleepIfNeeded();
        return element;
    }

Это упрощенная версия, вы можете улучшить ее с помощью проверок официантами и т. Д.

0 голосов
/ 31 января 2019

Вы можете попробовать найти компонент, используя xpath.Попробуйте код ниже.Это может помочь вам

driver.findElement(By.xpath("//div[contains(@id,'leftcontainer')]/div[3]/div[3]/a"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...