Selenium не находит элемент по тексту ссылки - PullRequest
0 голосов
/ 31 декабря 2018

Я пытаюсь использовать driver.find_element_by_partial_link_text ('2019'), но я получаю сообщение об ошибке, в котором говорится, что не удалось найти элемент.Я также попытался использовать find_element_by_link_text ('') и использовать всю строку, но это не сработает.Идеи?

driver.find_element_by_partial_link_text('2019').click()

Это то, что я пытался, но ничего не получалось.Вот веб-страница HTML:

<div class="rowOf" id="tableRow1">
    <div class="tableD">
        <div class="productDiv" id="productDiv92195">
            <h2 class="productTitle" id="productTitle92195" onclick="goToProduct(0)">2019 Wall Calendar by Camoleaf</h2>
            <img class="productImage" src="https://images-na.ssl-images-amazon.com/images/I/91j3pmPYDOL.jpg" onclick="goToProduct(0)">
            <hr>
            <h4 class="normalPrice" id="normalPrice0" onclick="goToProduct(0)">
                Normally: <span class="currency">$  </span>16.95
            </h4>
            <h4 class="promoPrice" style="margin:2.5px auto;" id="promoPrice92195" onclick="goToProduct(0)">
                Your Amazon Price: <span class="currency">$  </span>1.70
            </h4>
            <h3>Your Total: <span class="currency">$  </span>1.70</h3>
            <p class="clickToViewP" id="cToVP92195" onclick="goToProduct(0)">Click to view and purchase!</p>
        </div>
    </div>
    <div class="tableD">
        <div class="productDiv" id="productDiv69354">
            <h2 class="productTitle" id="productTitle69354" onclick="goToProduct(1)">Pure Lyft Energy Drink Mix (4 Pack) by PURELYFT</h2>
            <img class="productImage" src="https://images-na.ssl-images-amazon.com/images/I/81kCgs96Z0L.jpg" onclick="goToProduct(1)">
            <hr>
            <h4 class="normalPrice" id="normalPrice1" onclick="goToProduct(1)">
                Normally: <span class="currency">$  </span>9.99
            </h4>
            <h4 class="promoPrice" style="margin:2.5px auto;" id="promoPrice69354" onclick="goToProduct(1)">
                Your Amazon Price: <span class="currency">$  </span>0.99
            </h4>
            <h3>Your Total: <span class="currency">$  </span>0.99</h3>
            <p class="clickToViewP" id="cToVP69354" onclick="goToProduct(1)">Click to view and purchase!</p>
        </div>
    </div>
    <div class="tableD">
        <div class="productDiv" id="productDiv79478">
            <h2 class="productTitle" id="productTitle79478" onclick="goToProduct(2)">Multi-Purpose Calf Compression Sleeves by DS Sports</h2>
            <img class="productImage" src="https://images-na.ssl-images-amazon.com/images/I/91U7ExY-SfL.jpg" onclick="goToProduct(2)">
            <hr>
            <h4 class="normalPrice" id="normalPrice2" onclick="goToProduct(2)">
                Normally: <span class="currency">$  </span>12.95
            </h4>
            <h4 class="promoPrice" style="margin:2.5px auto;" id="promoPrice79478" onclick="goToProduct(2)">
                Your Amazon Price: <span class="currency">$  </span>5.05
            </h4>
            <h3>Your Total: <span class="currency">$  </span>5.05</h3>
            <p class="clickToViewP" id="cToVP79478" onclick="goToProduct(2)">Click to view and purchase!</p>
        </div>
    </div>
</div>

Ответы [ 2 ]

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

вместо использования driver.findElement (By.partialLinkText ("2019"));Вы должны использовать driver.findElement (By.linkText ("2019"));Это снова не будет работать, так как есть много каландров, в которых текст ссылки - 2019. Поэтому вам нужно указать конкретное имя.Например, я сделал это: -

import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class AmazonShoping {

    public static void main(String[] args) 
    {
        System.setProperty("webdriver.chrome.driver","C:\\Users\\priyj_kumar\\Downloads\\chromedriver.exe");
        WebDriver driver = new ChromeDriver();
        driver.get("https://www.amazon.in");
        driver.findElement(By.id("twotabsearchtextbox")).sendKeys("2019 Calander",Keys.ENTER);
        driver.findElement(By.linkText("mapyourmonth Planner Organizer Diary Wall Calendar 2019")).click();
        //checking for a particular boat headphone say Boat BassHeads 900 Wired Headphone with Mic
//      driver.findElement(By.linkText("Boat BassHeads 900 Wired Headphone with Mic")).click();
//      String str = driver.findElement(By.xpath("//*[@id='mp-tfa']/p")).getText();
//      System.out.println(str);
    }

}

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

0 голосов
/ 31 декабря 2018

В вашем примере HTML единственный экземпляр «2019» находится в теге <h2>, а не в привязке (<a>).Поскольку find_element_by_partial_link_text() ищет только теги привязки, он не найдет его.

Вы можете выполнить поиск через XPath, чтобы найти произвольный элемент с помощью частичного текста.Примерно так:

all_matches = driver.find_elements_by_xpath("//*[text()[contains(., '2019')]]")
all_matches[0].click()

Что XPath говорит:

  1. Поиск всех элементов (*)
  2. Посмотрите на каждый предметtext() по очереди
  3. Если это text() contains() строка "2019", добавьте ее в набор совпадений.

И, конечно, мы нажимаем только на первый соответствующий элемент.

...