Как щелкнуть конкретную ссылку в TableCell с несколькими ссылками, используя Selenium WebDriver и Шаблон объекта страницы?

Я пытаюсь использовать Selenium с WebDriver и шаблон объекта страницы для открытия ссылок в таблице. Я не имею никакого контроля над кодом веб-страницы.

Также обратите внимание, что это упрощенный пример, однако он работает и показывает проблему.

Рабочий код: https://gist.github.com/charlesgreen/b80ed7e164b7199eaa44229e104f4428

В таблице есть столбец с 1 или 2 ссылками в одной ячейке.

Для ячеек, содержащих только 1 ссылку, я могу открыть ссылку, вызвав.link_element.click на ячейку.

Для ячеек с 2 ссылками открывается первая ссылка в ячейке, но я пытаюсь открыть вторую ссылку (факты). Есть ли способ щелкнуть только ссылку "Факты" в ячейке (т. Е. Индекс или итерацию)?

Примечание. Исходный веб-сайт, на котором я работаю, с обеими открытыми ссылками, однако я не могу воспроизвести проблему локально. С учетом сказанного это не является моей целью Я пытаюсь открыть вторую ссылку. Это можно воспроизвести в приведенном ниже коде вместе с приведенной выше ссылкой.

# products.rb
require 'selenium-webdriver'
require './product_page'

Selenium::WebDriver.logger.output = 'selenium.log'
Selenium::WebDriver::Chrome.driver_path = '/Applications/chromedriver'
browser = Selenium::WebDriver.for :chrome

# UPDATE File path
browser.get('file:///Users/name/products/index.html')

product_page = ProductPage.new(browser)
product_page.open_facts_link


# product_page.rb
require 'page-object'

class ProductPage
    include PageObject
    table(:products, id: 'products')

    def open_facts_link
       products_element[2][0].link_element.click
    end
end


# index.html - validated with https://validator.nu/
<!DOCTYPE html>
<head>
    <title>Link Page</title>
    <script>
        function OpenPhotos(val) {
            var opened = window.open("");
            opened.document.write("<html><head><title>Photos</title></head><body>Photos</body></html>");
        }

        function OpenFacts(val) {
            var opened = window.open("");
            opened.document.write("<html><head><title>Facts</title></head><body>Facts</body></html>");
        }
    </script>
</head>
<body>
    <table id="products">
        <tr>
            <th>Links</th>
            <th>Description</th>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>
                        <a id="A_35" href="javascript:OpenFacts('35')" target="_blank">Facts</a>
                    </li>
                </ul>
            </td>
            <td>Product 1</td>
        </tr>
        <tr>
            <td>
                <ul>
                    <li>
                        <a id="A_36" href="javascript:OpenPhotos('36')" target="_blank">Photos</a>
                    </li>
                    <li>
                        <a id="L_36" href="javascript:OpenFacts('36')" target="_blank">Facts</a>
                    </li>
                </ul>
            </td>
            <td>Product 2</td>
        </tr>
    </table>
</body>

1 ответ

Решение

Чтобы щелкнуть разные ссылки в одной ячейке, вы можете передать локатор link_element быть более конкретным. В этом случае вы можете использовать href атрибут для дифференциации 2 ссылки:

# Click Facts link
products_element[2][0].link_element(href: /OpenFacts/).click

# Click Photos link
products_element[2][0].link_element(href: /OpenPhotos/).click
Другие вопросы по тегам