Savoir si un nom de classe contient un certain texte
Dans le cadre de mon test, le système est censé savoir si le type d'appareil utilisé pour ouvrir le site web est un périphérique mobile ou un bureau normal.
Je reçois l'erreur:
"InvalidSelectorError: Impossible de localiser un élément avec l'expression xpath //*[contains(@classe, est-mobiles..."
Propriété de firebug:
<body class="login-page is-desktop">
Mon test:
public class isMobile {
public static boolean isMobile = false;
public static boolean checkIfMobile(WebDriver driver) throws Exception {
List<WebElement> list = driver.findElements(By
.xpath("//body[contains(@class, 'is-mobile'"));
if (list == null) {
return false;
} else {
return true;
}
}
}
Quelqu'un peut-il me dire comment le XPath correct devrait être?
Sinon, juste obtenir le corps de l'élément premier (en utilisant n'importe quelle méthode que vous voulez - e.g
//body
), puis vérifier si elle est un attribut de classe par l'intermédiaire d'un element.getAttribute("class")
.OriginalL'auteur user3006009 | 2013-11-27
Vous devez vous connecter pour publier un commentaire.
Vous semblez être à côté de la clôture ronde et crochets:
Changer cela:
Dans cette:
Comme une note de côté, prendre en compte le fait que ce code a un autre un peu caché la question et vous aurez de match des choses que vous ne voulez pas de match comme cet attribut de classe:
login-page not-is-mobile
.Il n'y a aucun moyen de simplement correspondre que, comme vous le feriez à l'aide du sélecteur de CSS3
[class~="is-mobile"]
. Toutefois, vous pouvez venir autour de ce en faisant ceci:Tous les espaces sont là pour vous assurer correspond seulement quelque chose entre les espaces et qu'il correspond aussi même si c'est au début ou à la fin de l'attribut de classe.
C'est moche, certes, mais c'est le XPath moyen de le faire.
OriginalL'auteur Mosty Mostacho
C'est un excellent exemple de l'utilisation de l'outil erroné. L'une des choses que le code HTML concepteurs ont échappé a l'aide d'un seul
class
attribut de chaîne à coder plusieurs valeurs. Malheureusement, l'expression XPath, les concepteurs, qui avait au moins un tableau de construire à leur disposition, il a omis de remédier à cette erreur. Afin de ne pas les utiliser XPath pour cela, même si, comme Mosty Mostacho dit, vous pouvez le faire owork.La CSS, les concepteurs ont fait un meilleur travail. Bien qu'ils ne font pas quelque chose de semblable au tableau, ils ont au moins élevé de la
class
au-dessus d'une simple chaîne de caractères. UtilisationBy.cssSelector('body.is-mobile')
- c'est une bonne utilisation de CSS locators.OriginalL'auteur Ross Patterson