J'essaie d'utiliser Selenium avec WebDriver et le Page Object Pattern pour ouvrir des liens dans une table. Je n'ai aucun contrôle sur le code de la page Web.Comment cliquer sur un lien spécifique dans une TableCell avec plusieurs liens en utilisant Selenium WebDriver et Page Object Pattern?
Veuillez également noter que ceci est un exemple simplifié mais cela fonctionne et montre le problème.
Code du travail: https://gist.github.com/charlesgreen/b80ed7e164b7199eaa44229e104f4428
La table a une colonne avec 1 ou 2 liens dans une seule cellule.
Pour les cellules avec seulement 1 lien, je suis capable d'ouvrir le lien en appelant .link_element.click sur la cellule.
Pour les cellules avec 2 liens, cela ouvre le premier lien dans la cellule mais j'essaie d'ouvrir le deuxième lien (faits). Est-il possible de cliquer uniquement sur le lien Faits dans la cellule (c'est-à-dire, index ou itération)?
Note: Le site original, je travaille avec les deux liens ouverts mais je suis incapable de reproduire le problème localement Ceci étant dit, ce n'est pas mon objectif. J'essaie d'ouvrir le deuxième lien. Ceci est reproductible dans le code ci-dessous avec le lien gist ci-dessus.
# 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>
OMI, tout en créant le pseudo HTML pour référence accidentellement l'unicité de 'id' se sont perdus dans' 'Facts – DebanjanB
C'est un peu inhabituel un appel 'click' déclencherait 2 liens différents. Pouvez-vous créer un scénario de test reproductible (c.-à-d. Le code HTML et le code objet de la page)? L'exemple actuel semble être trop simplifié car je suis incapable de reproduire le problème et il génère des exceptions. –
@DebanjanB je vous remercie pour la note. J'ai corrigé l'identifiant. –