Нажмите на элемент HTML, используя Python

Если вы похожи на меня, когда я впервые начал использовать Java, я хотел использовать оператор «==» для проверки того, были ли два экземпляра String одинаковыми, но к лучшему или худшему это не правильный способ сделать это в Java.

В этом уроке я продемонстрирую несколько разных способов правильно сравнить строки Java, начиная с подхода, который я использую большую часть времени. В конце этого руководства по сопоставлению Java String я также обсужу, почему оператор «==» не работает при сравнении строк Java.

Вариант 1: Сравнение строк Java с методом equals Большая часть (возможно, в 95% случаев). Я сравниваю строки с методом equals класса Java String следующим образом:

if (string1.equals(string2))

Этот метод String равен методу для двух строк Java, и если они содержат точно такую ​​же строку символов, они считаются равными.

Взглянув на быстрый пример сравнения строк с методом equals, если был выполнен следующий тест, две строки не будут считаться равными, поскольку символы не являются точно такими же (случай символов различен):

String string1 = "foo";
String string2 = "FOO";

if (string1.equals(string2))
{
    // this line will not print because the
    // java string equals method returns false:
    System.out.println("The two strings are the same.")
}

Но, когда две строки содержат одну и ту же строку символов, метод equals вернет true, как в этот пример:

String string1 = "foo";
String string2 = "foo";

// test for equality with the java string equals method
if (string1.equals(string2))
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

Вариант 2: Сравнение строк с методом equalsIgnoreCase

В некоторых строковых сравнительных тестах вы захотите игнорируйте, являются ли строки строчными или строчными. Если вы хотите проверить свои строки на равенство в этом случае нечувствительным образом, используйте метод equalsIgnoreCase класса String, например:

String string1 = "foo";
String string2 = "FOO";

 // java string compare while ignoring case
 if (string1.equalsIgnoreCase(string2))
 {
     // this line WILL print
     System.out.println("Ignoring case, the two strings are the same.")
 }

Вариант 3: сравнение строк Java с методом compareTo

Существует также третий, менее распространенный способ сравнения строк Java, и это с методом сравнения String класса. Если две строки точно совпадают, метод compareTo вернет значение 0 (ноль). Ниже приведен краткий пример того, как выглядит этот метод сравнения строк:

String string1 = "foo bar";
String string2 = "foo bar";

// java string compare example
if (string1.compareTo(string2) == 0)
{
    // this line WILL print
    System.out.println("The two strings are the same.")
}

Пока я пишу об этой концепции равенства в Java, важно отметить, что язык Java включает в себя метод equals в базовый класс Java Object. Всякий раз, когда вы создаете свои собственные объекты, и вы хотите предоставить средства для проверки того, являются ли два экземпляра вашего объекта «равными», вы должны переопределить (и реализовать) этот метод equals в своем классе (точно так же, как язык Java предоставляет это равенство / сравнение в методе String равно).

Вы можете посмотреть на это ==, .equals (), compareTo () и compare ()

1
задан Ratmir Asanov 13 July 2018 в 11:10
поделиться

4 ответа

Если вы хотите щелкнуть ссылку, попробуйте

driver.find_element_by_link_text("Play").click()

Если текст ссылки фактически отображается на странице как PLAY , попробуйте

driver.find_element_by_link_text("PLAY").click()
2
ответ дан Andersson 17 August 2018 в 13:07
поделиться

Попробуйте следующее:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get(url)
# find all elements with following xPath (returns a list of elelements)
buttons = driver.find_elements_by_xpath("//a[@class = 'playButton']") # using xPath

, или если вы хотите щелкнуть по одному элементу, используйте это:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get(url)
# wait(at least 10 seconds) for element will be clickable and clcick on it
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class = 'playButton']"))).click();

Здесь вы можете найти больше информация о местонахождении элементов.

2
ответ дан Andrei Suvorkov 17 August 2018 в 13:07
поделиться

Есть ответы от @Andersson @AndreiSuvorkov и @ThatBird, но, похоже, осталось еще несколько факторов:

Поскольку вы вызываете get(url) и на следующем шаге пытается вызвать click() для элемента,

  • Вместо find_elements* вам нужно использовать find_element* следующим образом:
    button = driver.find_element_by_class_name('class_name')
    
  • Перед вызовом нажмите необходимо вызвать WebDriverWait для элемента для кликабельности следующим образом:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "element_xpath"))).click();
    
  • Когда вы хотите щелкнуть по определенному элементу, воспользуйтесь Стратегия локатора , которая однозначно идентифицирует WebElement в дереве DOM . Для <a> узлов (т. Е. Якорных тегов) LINK_TEXT и PARTIAL_LINK_TEXT должны быть предпочтительным вариантом. Помимо традиционного способа было бы широко использовать атрибуты class и id (в случае отсутствия атрибутов class или id для других атрибутов] для создания CssSelector или XPath следующим образом:
  • LINK_TEXT:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.LINK_TEXT, "Play"))).click()
    
  • CSS_SELECTOR:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "a.sc-button-play.playButton.sc-button.sc-button-xlarge[title='Play']"))).click()
    
  • XPATH:
    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class='sc-button-play playButton sc-button sc-button-xlarge' and @title='Play'][contains(.,'Play')]"))).click();
    
0
ответ дан DebanjanB 17 August 2018 в 13:07
поделиться

Попробуйте с помощью xpath -

driver.find_elements_by_xpath("//a[@class = 'playButton']")

и найдите xpath, вам нужно это сделать -

  • Щелкните правой кнопкой мыши нужный элемент и щелкните inspect
  • Проверенный элемент будет выделен в хром-отладчике. Щелкните правой кнопкой мыши на этом элементе и откроется множество параметров
  • Нажмите copy, а затем нажмите Copy XPath

И используйте этот путь в приведенном выше коде.

2
ответ дан ThatBird 17 August 2018 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: