4

У меня есть тест в селене (с использованием Python и FirefoxWebdriver). На тестовом веб-сайте у меня есть таблица записей, и я хочу щелкнуть элемент в этой таблице, но мне нужно прокрутить этот элемент, а затем я могу щелкнуть по нему.scrollIntoView() прокручивается до очень низкого уровня

Для прокрутки Я использую этот метод:

def scroll_to_element(self, element): 
    try: 
     self.driver.execute_script("return arguments[0].scrollIntoView();", element) 

    except Exception as e: 
     print 'error scrolling down web element', e 

Но этот метод свитки значительно вниз. Элемент находится примерно на 2 строках сверху и до сих пор не виден. Есть ли другой способ, который прокручивает Элемента? Я вообще не испытываю этих сценариев.

Вот таблица:

<table id="idMainGriddata_columns" agname="data_columns" userid="1" entityidcolumnname="dc_id" editable="1" border="0" class="adodb_dbgrid" scrollx="0"> 
    <colgroup> 
     <col width="25"> 
     # ... 
    </colgroup> 
    <tbody> 
     <tr entityid="14" class="adodb_dbgrid_even_row"> 
      <td class="centered" value="14">...</td> 
      # ... 
     </tr> 
     # ... 400x tr 
    </tbody> 
</table> 

и здесь использование этого метода:

variable = driver.find_element_by_xpath("//table[@id='idMainGriddata_columns']/tbody/tr/td[contains(text(), '" + column + "')]") 
st.scroll_to_element(self, variable) 
actions = ActionChains(self.driver) 
actions.move_to_element(variable) 
actions.double_click(variable) 
actions.perform() 
+0

Который точный элемент вы хотите щелкнуть? каково значение столбца? –

+0

Я не буду дважды щелкнуть эту целую строку (и я нажимаю на элемент td, который будет доступ к строке, которую я хочу). Я отредактирую свой пост. – Pivoman

+0

Ну, я хочу, чтобы щелкнуть по строке, сделайте свой xpath точкой, так как теперь он указывает на элемент td. –

ответ

4

Решение 1

Если вам нужно только нажать на элемент, который вы можете просто сделать :

driver.find_element_by_xpath("//table[@id='idMainGriddata_columns']/tbody/tr/td[contains(text(), '" + column + "')]").click() 

И если у вас есть Js для этого, он должен прокручивать его.

Решение 2 (грязный путь)

Если переменная колонка число:

column += 2 

Раствор 3

Добавить alignToTop в свой scrollIntoView:

self.driver.execute_script("return arguments[0].scrollIntoView(true);", element) 
+0

Sol. 1 - Мое сообщение отредактировано для получения дополнительной информации – Pivoman

+0

Sol. 3 не работает, я попробую решение 2 – Pivoman

+0

решение 2 отлично работает, но мне действительно нужен более четкий способ: / – Pivoman

Смежные вопросы