Выражение Chrome xpath для селена не находит элемент - PullRequest
0 голосов
/ 03 декабря 2018

На веб-странице у меня есть следующие элементы:

....
<select class="widget-listbox form-control" size="6" multiple="multiple">
    <option data-value="sIPSCs%20from%20juvenile%20(P21-30)%20C57BL%2F6J%20male%20mice%20hippocampus%20CA1%20pyramidal%20cell%20(A1)" value="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A1)" class="">sIPSCs&nbsp;from&nbsp;juvenile&nbsp;(P21-30)&nbsp;C57BL/6J&nbsp;male&nbsp;mice&nbsp;hippocampus&nbsp;CA1&nbsp;pyramidal&nbsp;cell&nbsp;(A1)</option>
    <option data-value="sIPSCs%20from%20juvenile%20(P21-30)%20C57BL%2F6J%20male%20mice%20hippocampus%20CA1%20pyramidal%20cell%20(A2)" value="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A2)" class="">sIPSCs&nbsp;from&nbsp;juvenile&nbsp;(P21-30)&nbsp;C57BL/6J&nbsp;male&nbsp;mice&nbsp;hippocampus&nbsp;CA1&nbsp;pyramidal&nbsp;cell&nbsp;(A2)</option>
</select>
....

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

//option[contains(text(),"sIPSC")]
//option[text()="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A1)"]
//option[@value="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A1)"]
//select/option[contains(text(),"sIPSC")]
//select/option[text()="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A1)"]
//select/option[@value="sIPSCs from juvenile (P21-30) C57BL/6J male mice hippocampus CA1 pyramidal cell (A1)"]

но ни один не показывает никаких результатов (в Chrome, XPath Helper Версия 2.02; Chrome версия 70.0.3538.110).Элемент, который я ищу, не находится внутри фрейма.Я также хочу выбрать целую строку «sIPSC из юношеских (P21-30) самцов мышей гиппокампа СА1 гиппокампа СА1 (A1)», которые могут быть переменной.Просто любая строка.Я заранее не знаю, как выглядит эта строка ...

Что я делаю не так в этот раз?Не должно ли работать любое из вышеперечисленных выражений?

Ответы [ 2 ]

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

Похоже, что оба параметра содержат "sIPSC"

Попробуйте xpath, который определяет, что уникально об элементе, например: //option[contains(text(),"sIPSC")][contains(text(),"A1")]

Если вы будетевсегда хочу параметр first : //select/option[contains(text(),"sIPSC")][1]

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

Чтобы выбрать первый вариант в качестве желаемого элемента, React элемент, вам нужно заставить WebDriverWait для элемента быть активным , и вы можете использовать любой изследующие ( Pythonic ) решения:

  • XPath 1 :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@class='widget-listbox form-control']/option[contains(@data-value,'(A1)')]"))).click()
    
  • XPath 2 :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@class='widget-listbox form-control']/option[contains(@value,'(A1)')]"))).click()
    
  • XPath 3 :

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//select[@class='widget-listbox form-control']/option[contains(.,'(A1)')]"))).click()
    
  • Примечание : необходимо добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...