Невозможно нажать на ссылку для загрузки href внутри динамически изменяемой таблицы с помощью веб-драйвера Selenium - PullRequest
0 голосов
/ 15 мая 2019

Я могу получить доступ ко всем нужным мне строкам и их ячейкам.Я даже могу получить доступ к тексту ячейки гиперссылки href, чтобы распечатать его.Но когда я пытаюсь использовать xpath или другие стратегии поиска элементов в «.click», ни одна из них не работает.Эта таблица находится в iframe, к которому я переключаюсь, и могу получить всю информацию о таблице (хотя иногда она жалуется на отсутствие связи со страницей или чем-то в этом роде.)

Я пробовал прямой xpath, // просматривая весьHTML дерево XPath и другие.Я даже пытался преобразовать весь мой код в Watir.Кто-нибудь знает, не показывая весь мой код, почему этот вложенный цикл дает мне нужную строку и ячейку.Но не позволит мне щелкнуть эту клетку?Какие еще методы я могу использовать, кроме '.text', чтобы получить доступ к значениям этой ячейки, чтобы щелкнуть ссылку / href, которая, возможно, не является xpath?Спасибо!

То же, что и выше.

# Iterate through all cells of the table
table.find_elements(:tag_name, "tr").each do |r|
    if r.text.include? "#{Num}"   
        puts "*******************************************"
        puts "cell found in table."
        puts "*******************************************"
        puts "Row text:"
        puts r.text
        r.find_elements(:tag_name, "td").each do |c|
            puts "c.text:"
            puts c.text
            if c.text.include? "Excel"
                c = c.find_element(:xpath, "/html/body/div/table/tbody/tr[36]/td[7]/a")
                c.click
            end
        end        
    end
end

Просто хотите иметь возможность доступа к строкам, в которых есть текст для введенного числа, и если этот текст существует где-либо в строке, перейдите кячейка, где находится ссылка, и щелкните по ней.

1 Ответ

0 голосов
/ 15 мая 2019

Этот XPath должен привести вас к метке привязки (без дополнительной работы)

"//table//tr/td[contains(text(),'#{num}')]/../td/a[contains(text(),'Excel')]"

Что он делает:

  • Поиск любой ячейки в строке, содержащей текст вашей переменной num (//table//tr/td[contains(text(),'#{num}')])
  • Затем выбирает эту строку (/..) [родительский метод доступа]
  • находит ячейку с тегом привязки, где текст содержит слово «Excel» (/td/a[contains(text(),'Excel')])

Сейчас я не использую селен, но я предполагаю, что теоретически должно работать следующее:

table.find_element(:xpath, 
  "//tr/td[contains(text(),'#{num}')]/../td/a[contains(text(),'Excel')]").click
...